package servidor.gerenciadorsalasjogo.so;

import java.rmi.RemoteException;
import java.util.List;

import servidor.gerenciadorsalasjogo.rn.RNGerenciadorSalasJogo;

import comum.rn.RNDescricaoSalaJogo;
import comum.rn.RNInfoSalaJogo;
import comum.rn.RNJogada;
import comum.so.exception.SalaCheiaException;
import comum.so.exception.SalaComNomeJaExistenteException;
import comum.so.exception.SalaNaoExisteException;
import comum.so.exception.SenhaIncorretaException;

public class SOGerenciadorSalasJogoEntradaImpl implements
		SOGerenciadorSalasJogoEntrada {

	private RNGerenciadorSalasJogo gerenciadorSalasJogo;

	public SOGerenciadorSalasJogoEntradaImpl(
			RNGerenciadorSalasJogo gerenciadorSalasJogo) {
		this.setGerenciadorSalasJogo(gerenciadorSalasJogo);
	}

	@Override
	public List<RNDescricaoSalaJogo> buscarSalasJogo(boolean mostrarCheios,
			boolean mostrarSenha) {
		return getGerenciadorSalasJogo().buscarSalasJogo(mostrarCheios,
				mostrarSenha);
	}

	@Override
	public RNInfoSalaJogo entrarSalaJogo(String identificador, Long idSalaJogo,
			String senha) throws SalaCheiaException, SalaNaoExisteException,
			SenhaIncorretaException {
		return getGerenciadorSalasJogo().entrarSalaJogo(identificador,
				idSalaJogo, senha);
	}

	@Override
	public RNInfoSalaJogo criarSalaJogo(String nome, String senha,
			String identificador) throws SalaComNomeJaExistenteException {
		return getGerenciadorSalasJogo().criarSalaJogo(nome, senha,
				identificador);

	}

	@Override
	public void sairSalaEspera(Long idSalaJogo, String identificador) {
		getGerenciadorSalasJogo().sairSalaEspera(idSalaJogo, identificador);
	}

	@Override
	public boolean entrarMesa(int posicaoDesejada, Long idSalaJogo,
			String identificador) {
		return getGerenciadorSalasJogo().entrarMesa(posicaoDesejada,
				idSalaJogo, identificador);
	}

	@Override
	public void sairMesa(Long idSalaJogo, String identificador) {
		getGerenciadorSalasJogo().sairMesa(idSalaJogo, identificador);
	}

	@Override
	public void fazerJogada(String jogadorQueJogou, Long idSalaJogo,
			RNJogada jogada) {
		getGerenciadorSalasJogo().fazerJogada(jogadorQueJogou, idSalaJogo,
				jogada);
	}

	@Override
	public void desistirJogo(Long idSalaJogo, String identificador)
			throws RemoteException {
		getGerenciadorSalasJogo().desistirJogo(idSalaJogo, identificador);

	}

	@Override
	public void iniciarPartida(Long idSalaJogo) {
		getGerenciadorSalasJogo().iniciarPartida(idSalaJogo);

	}

	protected RNGerenciadorSalasJogo getGerenciadorSalasJogo() {
		return gerenciadorSalasJogo;
	}

	protected void setGerenciadorSalasJogo(
			RNGerenciadorSalasJogo gerenciadorSalasJogo) {
		this.gerenciadorSalasJogo = gerenciadorSalasJogo;
	}
}
